//负责响应式数据
import {
  isObject
} from "../shared/utils";
import {
  mutableHandler
} from '../reactive/mutableHandler';

//数据代理/劫持
//功能一：state直接访问底下变量
//功能二：数据更新时 视图更新数据
/**
 * 创建响应式数据
 * @param {*} target state对象
 * @returns 响应式对象
 */
export function useReactive(target) {
  return createReactObject(target, mutableHandler);
}

/**
 * 创建响应式对象函数
 * @param {*} target 目标对象
 * @param {*} baseHandler 经过getter/setter设置后的对象
 * @return observer观察者对象
 */
function createReactObject(target, baseHandler) {
  if (!isObject(target)) {
    //不是对象，返回它本身不做处理
    return target;
  }

  //是对象，代理观察者
  //Proxy创建一个对象的代理，实现数据拦截和处理
  const observer = new Proxy(target, baseHandler);
  return observer;
}